package com.atguigu.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Created by Smexy on 2022/12/27
 *
 *      好吃：  节省创建链接和关闭链接的性能开销。
 *
 *              获取链接时，从池中借。省去了反复创建链接的开销。
 *              使用完后，归还到池中，复用链接。
 */
public class CustomJedisPoolDemo
{
    public static void main(String[] args) {

        //定义自己设置的连接池的配置
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

        jedisPoolConfig.setMaxTotal(20);  //池子的容量，最多容纳20个链接
        jedisPoolConfig.setMaxIdle(10);  // 池子空闲(没有人来借链接)时，池中依旧最多保留多少个空闲的链接
        jedisPoolConfig.setMinIdle(5);  //池子空闲(没有人来借链接)时，池中依旧最少保留多少个空闲的链接
        jedisPoolConfig.setBlockWhenExhausted(true); //当池中的链接被借光了，再有人来借链接，是否阻塞(让他等一等)
        jedisPoolConfig.setMaxWaitMillis(60000);  // block时的最大等待时长
        jedisPoolConfig.setTestOnBorrow(true);  // 借链接的时候，池子先测试下链接，好使，再借给别人
        jedisPoolConfig.setTestOnReturn(true);  // 还链接的时候，客户端先测试下链接，好使，再还回池子

        JedisPool jedisPool = new JedisPool(jedisPoolConfig,"hadoop102",6379);

        //从池中借链接
        Jedis jedis = jedisPool.getResource();

        System.out.println(jedis.ping());

        /*
            把连接还入池中
                如果jedis对象是new的，close就是关闭链接
                如果是借的，close就是归还连接
         */
        jedis.close();

    }
}
